kamicupさんのブログで、私の書いたものに対する言及がありました。
基本的には、私の書いた文章の本来の趣旨とは全く関係ない話題であって、コメントする必要のないものです。
しかし、本筋と関係ないところで、1つだけこれを機会に書いておいても悪くない話題があると感じたので手短に書いておきます。
上記ブログより引用
ん?100% Pure Javaのアプリケーションなんていくらでもあるのになぁ。もしかしてサーバとかケータイ用は除外ですか?いやしかしメインな分野を除外しちゃ拙いでしょう。と、それは余談ですが。
「余談ですが」と書いていますが、もちろんその余談へのコメントになります。念のため。
ちなみに、この文章は厳密に言えばkamicupさん個人に向けた文章ではなく、もっと広範囲の読者のための読み物として書かれています。
そもそも100% Pure Javaって何なのよ §
本当は100% Pure JavaTM Cookbookのような文書を前提に議論すると良いのでしょうが、残念ながら時間も体力も足りないので、それは行いません。
JDK 1.02の時代からJavaプログラムを書いてきて、実際に100% Pureのスタンドアロンのサーバアプリケーションを書いてきた立場から、ざっくばらんに私の印象で書きます。
100% Pure Javaというのは、単にネイティブコードを1行も書かなければ成立するものではありません。標準のJava実行環境が持つVMとクラスライブラリだけを使って実行可能である必要があります。そして、100% Pure JavaとはWrite Once Run Anywhereという理念を実現するための条件である以上は、Javaの実行環境は1種類でなければなりません。バージョンアップに伴うバージョンの相違が発生するのは致し方ないとしても、同時並行で異なる機能性を与えられたJava実行環境が併存することは厳に戒められねばなりません。(従って、この条件を満たすためには似て非なるものがJavaを名乗ることは許されず、マイクロソフトのJavaVMと称するソフトウェアは断固として世の中から抹殺されねばならない)
携帯電話Javaは100% Pureなのか? §
携帯電話Javaには独自のプロファイルが存在して、一般のJava実行環境とは互換性がありません。
そもそも入出力のモデルが全く違うので、同じプログラムは動かなくて当たり前だろうと思います。
(もし、100% Pure Javaが至上の価値だとすれば、携帯電話用JavaのようなものはマイクロソフトのJavaと同じように誤った存在であり抹殺すべきです)
なので、携帯電話で使われるJavaとは、私から見れば100% Pure Javaの不可能性を実証した典型的な事例でしかありません。
サーバ側Javaは100% Pureなのか? §
上記引用文の「サーバ」という言葉は、Webアプリケーションのサーバ側の処理を記述するServletやJSPだと解釈して、これは100% Pureであるかを考えてみたいと思います。
これについては、ServletやJSPアプリケーションは、標準Java実行環境でそのまま動かない(それを実行するアプリケーションを必要とする)という意味で、100% Pure Javaではあり得ません。
もし、実行するためのアプリケーション込みで1つのアプリケーションであると見なすならば、全て込みで100% Pureであるという主張は可能でしょう。不可能ではないと思います。
しかし、それは以下の2つの理由によって、あまり積極的には支持しません。
- 理由は良く分からないがTomcatは100% Pure Javaだとは主張していない。つまりTomcat込みで私の作ったServelet/JSPアプリケーションは100% Pureだという主張は成立しないかもしれない
- 少なくともJDK 1.1時代に、スタンドアロンのサーバJavaアプリケーションを作成するにはいくつかの問題があった。もしかしたら現在は解消されているかもしれないが、仮にそうだとしても対応が遅すぎるし、問題が出てから塞ぐという対象方法では、特定分野での問題は解決できても、一般論としての問題解決にならない
ちなみに、この問題は微妙で根深い部分があるので、詳細に突っ込んでいけば、Javaのどこに問題があるのかを突き詰めていけると思います。
ってか、JDK 1.1の時代にそれをやりました。既にやって終わった話なので、そんな古い話の蒸し返しには熱意が沸かない……というのが私の正直な感想です。